/*
 * 11内存处理函数.c
 *
 *  Created on: 2024年3月13日
 *      Author: HP
 */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int main0811(){
	int* p = (int*)malloc(sizeof(int)*10);
	// memset()重置内存空间的值，从哪里开始，重置为value，重置多少个字节
	memset(p, 0, 40);
	for(int i=0; i<10; i++){
		printf("%d\n", p[i]);
	}
	return 0;
}

int main081101(){
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int* p = (int*)malloc(sizeof(int)*10);
	// 目标、源、拷贝多少字节
	memcpy(p, arr, sizeof(int)*10);
	for(int i=0; i<10; i++){
		printf("%d\n", p[i]);
	}

	char ch[] = "hello\0 world";
	char str[100];
	memcpy(str, ch, 13);
	for(int i=0; i<13; i++){
		printf("%c", str[i]);
	}

	int arr2[] = {1,2,3,4,5,6,7,8,9,10};
	// 源和目标尽量不要重叠，不然可能报错；memmove()用法和memcpy()一样，区别是：dest和src所指的内存空间重叠时，memmove()仍然能处理，不过执行效率比memcpy()低
	memcpy(&arr2[5], &arr2[3], 20);
	for(int i=0; i<10; i++){
		printf("%d\n", arr2[i]);
	}

	return 0;
}

int main081102(){
	int arr1[] = {1,2,3,4,5,6,7,8,9,10};
	int arr2[] = {1,2,3,4,5};
	// 比较20个字节
	// int value = memcmp(arr1, arr2, 20); // 0
	int value = memcmp(arr1, arr2, 21); // 1
	printf("%d\n", value);

	char ch1[] = "hello\0 world";
	char ch2[] = "hello\0 world";
	// 碰到\0也会继续比，这是和strcmp()的区别
	int value2 = memcmp(ch1, ch2, 13); // 0
	printf("%d\n", value2);

	return 0;
}
